﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Web;

namespace Framework
{
    public class WebUtils
    {
        const string VALIDCODECHARACTERS = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz";
        public static string GenerateValidCode(int length)
        {
            int number;
            StringBuilder sb = new StringBuilder();
            System.Random random = new Random();
            for (int i = 0; i < length; i++)
            {
                number = random.Next(VALIDCODECHARACTERS.Length);
                sb.Append(VALIDCODECHARACTERS[number]);
            }
            return sb.ToString();
        }
        public static void CreateValidCodeImage(string ValidCode, HttpResponse response)
        {  //将验证码生成图片显示
            if (string.IsNullOrEmpty(ValidCode))
                return;
            Bitmap image = new Bitmap((int)Math.Ceiling((ValidCode.Length * 13.5)) + 6, 22);
            Graphics g = Graphics.FromImage(image);

            //生成随机生成器 
            Random random = new Random();
            //清空图片背景色 
            g.Clear(Color.White);
            //画图片的背景噪音线 
            for (int i = 0; i < 25; i++)
            {
                int x1 = random.Next(image.Width);
                int x2 = random.Next(image.Width);
                int y1 = random.Next(image.Height);
                int y2 = random.Next(image.Height);

                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
            }
            Font font = new System.Drawing.Font("Arial", 13, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
            System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
            g.DrawString(ValidCode, font, brush, 2, 2);
            //画图片的前景噪音点 
            for (int i = 0; i < 100; i++)
            {
                int x = random.Next(image.Width);
                int y = random.Next(image.Height);

                image.SetPixel(x, y, Color.FromArgb(random.Next()));
            }
            //画图片的边框线 
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            response.ClearContent();
            response.ContentType = "image/Gif";
            response.AppendHeader("Cache-Control", "no-cache");
            response.BinaryWrite(ms.ToArray());

            g.Dispose();
            image.Dispose();

            response.End();
        }
    }
}
